package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JTextField;
import negocio.Medico;
import negocio.Paciente;
import negocio.Sistema;
import negocio.Turno;

import ventanas.VentanaTurno;

public class ControladorVentanaTurno implements ActionListener, MouseListener{

	private VentanaTurno v;
	private Sistema s;
	private JList<Paciente> lista;
	private DefaultListModel<Paciente> modelo;
	
	public ControladorVentanaTurno(VentanaTurno ventana){
		this.v = ventana;
		this.s = Sistema.obtenerInstancia();
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		this.lista = v.getLista();
		
		if(e.getSource()==v.getBtnBuscarPaciente()){
			String caracteres = v.getTxtPacienteBusqueda().getText();
			List<Paciente> pacientes = s.buscarPacientes(caracteres);
			this.modelo = new DefaultListModel<>();
			this.lista.setModel(modelo);
			for(Paciente p:pacientes){
				modelo.addElement(p);
			}
		}
		
		if(e.getSource()==v.getBtnConfirmarTurno()){
			
//			if(v.hayTurnoSeleccionado()){
				Medico medico = new Medico();
				DefaultComboBoxModel<Medico> modeloMedicoAux = (DefaultComboBoxModel<Medico>) v.getV().getCombo().getModel();
				String txtMedico = v.getLblMedicoDer().getText();
				for(int i=0; i<modeloMedicoAux.getSize();i++){
					if(modeloMedicoAux.getElementAt(i).toString().equals(txtMedico)){
						medico = modeloMedicoAux.getElementAt(i);
					}
				}
				
				String fecha = v.getLblFechaDer().getText();
				String horario = v.getLblHorarioDer().getText();
				
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
				try {
					Date fechaYHora = sdf.parse(""+fecha+" "+horario);
					Calendar c = Calendar.getInstance();
					c.setTime(fechaYHora);
					v.dispose();
					
					List<Turno> turnos = s.obtenerTurnosEnFecha(medico, c);
					for(Turno t:turnos){
						if(t.getFechaYhora().equals(c)){
							t.setPaciente(v.getDelTurno());
							String estado = (String)v.getComboEstadoDelTurno().getSelectedItem();
							
							if(estado.equals("Disponible") || estado.equals("Cancelado")){
								t.setPaciente(null);
							}
							
							t.setEstado(estado);
							s.actualizarTurno(t);
							v.getV().actualizarTabla(c);
						}
					}
					
				} catch (ParseException e1) {
					e1.printStackTrace();
				}				
			}
			
//		}
		
		if(e.getSource()==v.getBtnCancelar()){
			v.dispose();
		}

	}

	@Override
	@SuppressWarnings("unchecked")
	public void mouseClicked(MouseEvent e) {
		if(e.getClickCount()==2){
			JTextField txtpaciente = v.getTxtPacienteBusqueda();
			String paciente = v.getLista().getSelectedValue().toString();
			txtpaciente.setText(paciente);
			JList<Paciente> lista = (JList<Paciente>)e.getSource();
			DefaultListModel<Paciente> modelo = (DefaultListModel<Paciente>) lista.getModel();
			Paciente p = modelo.get(lista.getSelectedIndex());
			v.setDelTurno(p);
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {}

	@Override
	public void mouseReleased(MouseEvent e) {}

	@Override
	public void mouseEntered(MouseEvent e) {}

	@Override
	public void mouseExited(MouseEvent e) {}
}
